// 核心模块Http 
const http = require('http')

// 通过 http.createServer() 创建服务  得到一个服务实例
const server = http.createServer()

//  监听服务器端口成功 等同于listen()方法中的回调函数
server.on('listening',function(){
    console.log('链接成功')
})
// 服务错误统一处理
server.on('error',function(err){
    console.log(err)
})

server.setTimeout(60000)  // 设置请求超时时长为1分钟  （默认两分钟，单位为毫秒） 

// 监听请求 （每当有请求时触发） req: 请求信息  res:响应处理
server.on('request',function(req,res){
    console.log('xxx用户链接了服务')
    console.log(req)

    /** 响应处理 */

    /** writeHead() 此方法只能在消息上调用一次，并且必须在调用 response.end() 之前调用。 */
    res.writeHead(     //向请求发送响应头   (http状态码，'状态信息：可不填没啥作用'，{响应头})
        200,{
            'Content-Type': 'text/plain'  // 设置为文本形式展示数据
        }
    )      

    // res.statusCode = 200   等同于writeHead()方法中第一个参数
    // res.setHeader('Content-Type', 'text/plain') 等同于writeHead()方法中最后一个参数，可调用多次，并且与writeHead()设置响应头信息的数据合并

    res.write('<h1>hello</h1>') // 写入响应数据

    res.end()   // 表明已发送所有响应头和主体，该服务器应该视为此消息已完成。   // end()可直接写入数据并结束，为write()方法中的数据
})

// 服务实例通过listen(端口号，主机名，回调函数) 监听端口  监听已用的端口号会报错   没有设置监听端口号则会随机设置一个可用端口号
server.listen(3000,'localhost')


